package com.ct.config.mybatisPlus;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;

import java.util.Date;

/**
 * MyBatis-Plus 的自定义元对象处理器，用于自动填充字段。
 * 该类主要用于在数据库操作（插入和更新）时，自动填充一些公共字段，例如 `createBy`、`createTime`、`updateBy`、`updateTime`。
 */

public class MyMetaObjectHandler implements MetaObjectHandler {

    /**
     * 插入时自动填充字段。
     * 该方法在 MyBatis-Plus 执行 `insert` 操作时自动调用，为 `createBy` 和 `createTime` 赋默认值。
     *
     * @param metaObject MyBatis-Plus 元对象，包含当前操作的实体对象信息。
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        // createTime 和 updateTime 必须是pojo属性，不是数据库表的字段
        // 设置创建人（createBy）字段的默认值为 "kkrot"
        this.strictInsertFill(metaObject,"createBy",String.class,"kkrot");
        // 设置创建时间（createTime）字段的默认值为当前时间
        this.strictInsertFill(metaObject,"createTime", Date.class,new Date());
        this.strictInsertFill(metaObject,"updateTime", Date.class,new Date());
    }


    /**
     * 更新时自动填充字段。
     * 该方法在 MyBatis-Plus 执行 `update` 操作时自动调用，为 `updateBy` 和 `updateTime` 赋默认值。
     *
     * @param metaObject MyBatis-Plus 元对象，包含当前操作的实体对象信息。
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        // 设置更新人（updateBy）字段的默认值为 "kkrot"
        this.strictUpdateFill(metaObject,"updateBy",String.class,"carlo");
        // 设置更新时间（updateTime）字段的默认值为当前时间
        this.strictUpdateFill(metaObject,"updateTime", Date.class,new Date());
    }
}